/*
背景：两个人每人发3张牌（各从一副牌中），每张牌包括花色（红桃(Heart)>黑桃(Spade)>方块(Diamond)>梅花(Club））和大小（从小到大依次是：2-10、J、Q、K、A），胜负规则如下：同花顺（3张同花色的连牌，先比大小，再比花色，后同）>炸弹（3张相同大小的牌）>连牌（3张不同花色的连牌）>对子（两张相同大小的牌）>单牌。例如，红桃QKA>黑桃QKA>梅花567>方块234>AAA（红桃、方块、梅花）>AAA（黑桃、方块、梅花）>JQK（红桃、红桃、方块）>JQK（黑桃、红桃、方块）>AA2（梅花黑桃梅花）>QQJ（红桃梅花方块）>JQA（红桃红桃红桃）。注：A23不算连牌。

输入：A的3张牌（未排序）和B的3张牌（未排序）。（参见用例）

输出：A的3张牌的排序后的输出和B的3张牌的排序后的输出，以及A和B谁获胜。（参见用例）
*/

/*
测试用例1:
输入：
DA H2 C3
H4 H3 DJ
输出：
Winner is A!↵
A: DA C3 H2↵
B: DJ H4 H3↵

测试用例2:
输入：
HA CA CB
HQ CJ CQ
输出：
Input Error!↵

测试用例3:
输入：
HA CA CJ
DA DK DK
输出：
Input Error!↵

测试用例4:
输入：
SA SJ SK
SA SJ SK
输出：
Draw!↵
A: SA SK SJ↵
B: SA SK SJ↵

测试用例5:
输入：
D2 D4 D3
HA DA CA
输出：
Winner is A!↵
A: D4 D3 D2↵
B: HA DA CA↵

测试用例6:
输入：
H2 C2 D2
CA DQ DK
输出：
Winner is A!↵
A: H2 D2 C2↵
B: CA DK DQ↵

测试用例7:
输入：
H10 D9 C8
H3 S3 D3
输出：
Winner is B!↵
A: H10 D9 C8↵
B: H3 S3 D3↵

测试用例8:
输入：
H2 H3 D4
HA DA CK
输出：
Winner is A!↵
A: D4 H3 H2↵
B: HA DA CK↵
*/
#include <iostream>
#include <map>
#include <string>
using namespace std;

// 数字价值表
map<char, int> num_value = {
	{'2', 2},
	{'3', 3},
	{'4', 4},
	{'5', 5},
	{'6', 6},
	{'7', 7},
	{'8', 8},
	{'9', 9},
	{'1', 10},
	{'J', 11},
	{'Q', 12},
	{'K', 13},
	{'A', 14},
};

// 花色价值表
map<char, int> color_value = {
	{'C', 1}, // 梅花
	{'D', 2}, // 方块
	{'S', 3}, // 黑桃
	{'H', 4}, // 红桃
};

// 记录输入是否正确
bool Flag = true;

// 计算单个牌的大小
int calculate_value(const string &str)
{
	int num = 0;
	
	// 判断数字、花色是否正确
	if (num_value.count(str[1]) == 0 || color_value.count(str[0]) == 0)
	{
		Flag = false;
		return -1;
	}
	if (str.size() == 3)
	{
		if (str[1] != '1' || str[2] != '0')
		{
			Flag = false;
			return -1;
		}
	}
	
	return num_value[str[1]] * 10 + color_value[str[0]];
}

// 排序函数
bool sort_algorithm(const string &str1, const string &str2)
{
	int num1 = calculate_value(str1);
	int num2 = calculate_value(str2);
	
	// 两张牌相同
	if (num1 == num2)
		Flag = false;
	
	return num1 > num2;
}

// 计算3个牌的组合大小
int calculate_sum_value(const vector<string> &v)
{
	
	// 同花顺
	if (v[0][0] == v[1][0] && v[1][0] == v[2][0])
	{
		if (num_value[v[0][1]] == num_value[v[1][1]]+1 && num_value[v[1][1]] == num_value[v[2][1]]+1)
		{
			return pow(10, 6) + num_value[v[0][1]] * 10 + color_value[v[0][0]];
		}
	}
	
	// 炸弹
	else if (num_value[v[0][1]] == num_value[v[1][1]] && num_value[v[1][1]] == num_value[v[2][1]])
	{
		return pow(10, 5) + num_value[v[0][1]] * 10 + color_value[v[0][0]];
	}
	
	// 连牌
	else if (num_value[v[0][1]] == num_value[v[1][1]]+1 && num_value[v[1][1]] == num_value[v[2][1]]+1)
	{
		return pow(10, 4) + num_value[v[0][1]] * 10 + color_value[v[0][0]];
	}
	
	// 对子
	else if (num_value[v[0][1]] == num_value[v[1][1]] || num_value[v[1][1]] == num_value[v[2][1]])
	{
		return pow(10, 3) + num_value[v[1][1]] * 10 + color_value[v[1][0]];
	}
	
	// 单牌 -- 比较最大单牌
	else 
	{
		return num_value[v[0][1]] * 10 + num_value[v[0][0]];
	}
	return -1;
}


int main(int argc, char *argv[]) {
	// 接收A
	vector<string> A;
	for (int i=0; i < 3; i++)
	{
		string t;
		cin >> t;
		A.push_back(t);
	}
	
	// 接收B
	vector<string> B;
	for (int i=0; i < 3; i++)
	{
		string t;
		cin >> t;
		B.push_back(t);
	}
	
	// 排序
	sort(A.begin(), A.end(), sort_algorithm);
	sort(B.begin(), B.end(), sort_algorithm);
	
	// 输入不符合要求
	if (!Flag)
	{
		cout << "Input Error!" << endl;
		return 0;
	}
	
	// 打印比较结果
	int value_A_max = calculate_sum_value(A);
	int value_B_max = calculate_sum_value(B);
	
	if (value_A_max > value_B_max)
	{
		cout << "Winner is A!" << endl;
	}
	else if (value_A_max < value_B_max)
	{
		cout << "Winner is B!" << endl;
	}
	else 
	{
		cout << "Draw!" << endl;
	}
	
	// 打印排序结果
	cout << "A:";
	for (int i=0; i < A.size(); i++)
		{
			cout << " " << A[i];
		}
	cout << endl;
	
	cout << "B:";
	for (int i=0; i < B.size(); i++)
		{
			cout << " " << B[i];
		}
	cout << endl;
}